关闭。这个问题需要细节或明确性。它当前不接受答案。 想改善这个问题吗?添加细节并通过编辑此帖子来澄清问题。 1年前关闭。 改善这个问题 我正在做一些代码挑战,我想通过指定起始索引并从起始索引仅获取第一个(3个或可以是任意长度)值来从数组中获取前三个值。 我试过了这段代码,它可以正常工作,但是代码结构太长,因此如何使它更短,以便于理解。 整数n = 10; 双重签名=新的double [] {1,1,1}; double [] ret =新的double [n]; 双和= 0; ret [0] =签名[0]; ret [1] =签名[1]; ret [2] =签名[2]; int x,i; 对于(i = 0; i
2021-01-31 08:19:30
使用LINQ,您可以尝试如下操作: var值= array.Skip(索引) 。取(n) .ToArray(); 其中index是第一个项目的索引,n是要选择的项目数。 例如。 https://dotnetfiddle.net/Pk1rwY 作为旁注。使用LINQ并不意味着您的代码会更快。它将更加紧凑/可读,等等。为了评估代码的性能,您必须使用BenchmarkDotNet之类的东西。 | 没有Linq解决方案: 私有静态T [] Extract(T []源,int fromIndex,int长度){ 如果(null ==源) 抛出新的ArgumentNullException(nameof(source)); 否则(fromIndex <0) 抛出新的ArgumentOutOfRangeException(nameof(fromIndex), “ From Index必须为非负数”); 否则(长度<0) 抛出新的ArgumentOutOfRangeException(nameof(length), “长度必须为非负数”); if(fromIndex> = source.Length || length == 0) 返回新的T [0]; T []结果=新的T [Math.Min(length,source.Length-fromIndex)]; Array.Copy(source,fromIndex,result,0,result.Length); 返回结果; } 然后 double []签名=新的double [] {0,1,2,3,4,5}; double [] ret = Extract(签名,3,2); Console.Write(string.Join(“,”,ret)); 结果: 3 4 | 根据您的问题,您需要利用.Take和.Skip运算符。 var result = array.Skip(startingIndex).Take(numberOfElements); 因此,从您的代码看来,您正在尝试做一些不同的事情,即求和元素。 .Sum运算符可能对您有帮助。 | 不是您要找的答案?浏览标记为c#数组linq的其他问题,或询问您自己的问题。